Django এর ORM এর মাধ্যমে Query তৈরি করা

Web Development - জ্যাঙ্গো (Django) - Django ডাটাবেস সম্পর্ক এবং ORM কুয়েরি
161

Django তে ORM (Object Relational Mapping) একটি শক্তিশালী ফিচার যা ডাটাবেসের সাথে যোগাযোগ করার জন্য Python কোড ব্যবহার করে। ORM ডাটাবেস টেবিলগুলির সাথে সম্পর্কিত Python ক্লাস (মডেল) তৈরি করে এবং আপনাকে SQL কোড লেখার পরিবর্তে Python কোডে ডাটাবেস অপারেশন করতে সাহায্য করে। ORM এর মাধ্যমে আপনি ডাটাবেসের রিড, ক্রিয়েট, আপডেট এবং ডিলিট (CRUD) অপারেশনগুলি সহজে সম্পাদন করতে পারেন।


Django ORM এর মূল ধারণা

Django ORM একটি Python ক্লাস এবং তার ইনস্ট্যান্সের মাধ্যমে ডাটাবেসের টেবিলগুলিকে প্রতিনিধিত্ব করে। এই Python ক্লাসগুলো Model নামে পরিচিত, এবং এগুলি ডাটাবেসের টেবিলের সাথেই সম্পর্কযুক্ত থাকে।

মডেল তৈরি করা

প্রথমে একটি মডেল তৈরি করতে হবে যা ডাটাবেস টেবিলের প্রতিনিধিত্ব করবে। উদাহরণস্বরূপ, একটি Post মডেল তৈরি করা যাক:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return self.title

এখানে:

  • title: একটি চরিত্র ক্ষেত্র (CharField), যেখানে ব্লগ পোস্টের শিরোনাম থাকবে।
  • content: একটি টেক্সট ক্ষেত্র (TextField), যেখানে ব্লগ পোস্টের বাকি কন্টেন্ট থাকবে।
  • created_at: একটি ডেটাটাইম ক্ষেত্র (DateTimeField), যা স্বয়ংক্রিয়ভাবে পোস্টের তৈরি হওয়ার সময় সংরক্ষণ করবে।

Django ORM এর মাধ্যমে Query তৈরি করা

১. ডাটাবেসে নতুন রেকর্ড যোগ করা

নতুন রেকর্ড যুক্ত করার জন্য, Django ORM এ মডেলের ইনস্ট্যান্স তৈরি করে সেটি সেভ করা হয়।

# নতুন পোস্ট তৈরি করা
new_post = Post(title="My First Blog Post", content="This is the content of the post.")
new_post.save()  # ডাটাবেসে সেভ করা

এখানে:

  • new_post.save() ব্যবহার করে পোস্টটি ডাটাবেসে সেভ করা হচ্ছে।

২. সমস্ত রেকর্ড আনা (Retrieve all records)

ডাটাবেসের সমস্ত রেকর্ড প্রাপ্তি জন্য all() মেথড ব্যবহার করা হয়।

# সমস্ত পোস্টগুলি পাওয়া
all_posts = Post.objects.all()

এটি সমস্ত পোস্ট ডাটাবেস থেকে এনে all_posts নামক ভেরিয়েবলে রাখবে। আপনি পরে এই ভেরিয়েবলটি ব্যবহার করে পোস্টগুলি প্রদর্শন করতে পারেন।

৩. নির্দিষ্ট শর্তে রেকর্ড খুঁজে বের করা (Filtering)

নির্দিষ্ট শর্তের ভিত্তিতে রেকর্ড খুঁজে বের করার জন্য filter() মেথড ব্যবহার করা হয়।

# যেখানে title 'First' শব্দ দিয়ে শুরু হয়, সেগুলি খুঁজে বের করা
posts = Post.objects.filter(title__startswith='First')

এখানে title__startswith='First' ব্যবহার করে আমরা এমন সমস্ত পোস্ট পেয়েছি যাদের শিরোনাম "First" দিয়ে শুরু হয়। Django ORM ফিল্টারিংয়ে বিভিন্ন ধরনের এক্সপ্রেশন ব্যবহার করা যেতে পারে, যেমন:

  • exact: নির্দিষ্ট মান।
  • icontains: কেস ইনসেন্সিটিভ উপায়ে কনটেন্ট চেক করা।
  • gte, lte: বড় বা ছোট সমান।

৪. একক রেকর্ড খোঁজা (Getting a single record)

একটি নির্দিষ্ট রেকর্ড খুঁজে বের করার জন্য get() মেথড ব্যবহার করা হয়। এটি একটি একক রেকর্ড রিটার্ন করে, কিন্তু যদি একাধিক রেকর্ড পাওয়া যায়, তবে এটি MultipleObjectsReturned ত্রুটি দিবে।

# একটি নির্দিষ্ট পোস্ট পাওয়া
post = Post.objects.get(id=1)

এখানে, id=1 দিয়ে আমরা প্রথম পোস্টটি খুঁজে পেয়েছি।

৫. রেকর্ড আপডেট করা

ডাটাবেসে উপস্থিত রেকর্ড আপডেট করার জন্য, মডেলের ইনস্ট্যান্সের মাধ্যমে মান পরিবর্তন করা হয় এবং তারপর save() মেথড ব্যবহার করে আপডেট করা হয়।

# প্রথম পোস্টটির শিরোনাম আপডেট করা
post = Post.objects.get(id=1)
post.title = "Updated Blog Post Title"
post.save()

এখানে, প্রথম পোস্টের শিরোনাম পরিবর্তন করে তারপর save() মেথড দিয়ে ডাটাবেসে সেভ করা হয়েছে।

৬. রেকর্ড মুছে ফেলা (Deleting records)

ডাটাবেস থেকে একটি রেকর্ড মুছে ফেলতে delete() মেথড ব্যবহার করা হয়।

# প্রথম পোস্টটি মুছে ফেলা
post = Post.objects.get(id=1)
post.delete()

এটি ডাটাবেস থেকে নির্দিষ্ট পোস্ট মুছে ফেলবে।


Django ORM এর মাধ্যমে আরও জটিল Query তৈরি করা

Django ORM এ আরও জটিল এবং কাস্টম কোয়েরি তৈরি করতে Q অবজেক্ট, exclude(), order_by() ইত্যাদি ব্যবহার করা যেতে পারে।

১. exclude() - ফলাফল থেকে কিছু রেকর্ড বাদ দেয়া

# যেখানে title 'First' দিয়ে শুরু না হয়, সেগুলি পাওয়া
posts = Post.objects.exclude(title__startswith='First')

২. order_by() - রেকর্ড সাজানো

# পোস্টগুলো সাজানো ক্রমে
posts = Post.objects.all().order_by('created_at')

এটি পোস্টগুলিকে created_at ক্ষেত্র অনুসারে ক্রমবর্ধমানভাবে সাজাবে। '-created_at' ব্যবহার করলে তারিখ অনুযায়ী অবতরণ করা যাবে।

৩. Q অবজেক্ট ব্যবহার করে জটিল শর্ত

from django.db.models import Q

# Q অবজেক্ট ব্যবহার করে একাধিক শর্ত প্রয়োগ
posts = Post.objects.filter(Q(title__startswith='First') | Q(content__contains='Django'))

এখানে Q অবজেক্টের মাধ্যমে আমরা দুইটি শর্ত দিয়ে কোয়েরি তৈরি করেছি, যেখানে শিরোনাম 'First' দিয়ে শুরু বা কনটেন্টে 'Django' শব্দটি থাকবে।


সারাংশ

Django এর ORM এর মাধ্যমে ডাটাবেসের সাথে যোগাযোগ করা খুবই সহজ। আপনি ORM এর মাধ্যমে ডাটাবেসের CRUD অপারেশন খুব সহজেই করতে পারেন। এতে আপনি Python কোডেই SQL কোডের কাজ করতে পারেন, যা ডাটাবেসের সাথে কাজ করার প্রক্রিয়াকে অনেক সহজ এবং দ্রুত করে তোলে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...